package biz.datalk.industrialland.common.def;

public interface CommonConstant {

    /**
     * 登录用户令牌缓存KEY前缀
     */
    String PREFIX_USER_TOKEN = "PREFIX_USER_TOKEN_";
    /**
     * 用户登录最新的 token  key: {PREFIX_USER_TOKEN_LAST} + username
     */
    String PREFIX_USER_TOKEN_LATEST = "PREFIX_USER_TOKEN_LATEST_";


    /** nginx 默认过滤掉有下划线的请求头，故使用中横线 */
    String ACCESS_TOKEN = "access-token";
    /**
     * 固定请求头 客户端类型，可选值 1｜2｜3｜4｜5（1-ANDROID 2-IOS 3-WINDOWS 4-MACOS 5-LINUX）
     * 100-后台管理系统页面
     * 50-云文件WEB端
     */
    String X_CLIENT_TYPE = "x-client-type";
    /**
     * 固定请求头 客户端版本号，正整数
     */
    String X_CLIENT_VER = "x-client-ver";
    /**
     * 固定请求头 客户端ID，字符串 （备用）
     */
    String X_CLIENT_ID = "x-client-id";

    /**
     * JS-SDK 客户端的标识 长度为32的字符串，由小写字母和数字组成
     */
    String X_CLIENT_JSCID = "x-client-jscid";

    /**
     * 请求头 标识ios客户端是否来自 appStore
     * 1- 标识 appStore里现在的客户端;
     * 其他值或者无该请求头标识非 appStore的客户端
     */
    String X_CLIENT_FROM_AS = "x-client-from-as";

    /**
     * url 上的 access_token 参数， 主要用于开放平台
     */
    public static final String URL_ACCESS_TOKEN = "access_token";
    /**
     * 用于标识请求类型, 固定值为 DATALK_API
     */
    public static final String X_REQ_TYPE = "X-Req-Type";
    public static final String X_REQ_TYPE_VALUE = "DATALK_API";
    public static final String I18N_PARAM = "lang";

    /**
     * 0：一级菜单
     */
    public static Integer MENU_TYPE_0 = 0;
    /**
     * 1：子菜单
     */
    public static Integer MENU_TYPE_1 = 1;
    /**
     * 2：按钮权限
     */
    public static Integer MENU_TYPE_2 = 2;

    /**
     * 通告对象类型（USER:指定用户，ALL:全体用户）
     */
    public static String MSG_TYPE_UESR = "USER";
    public static String MSG_TYPE_ALL = "ALL";

    /**
     * 发布状态（0未发布，1已发布，2已撤销）
     */
    public static String NO_SEND = "0";
    public static String HAS_SEND = "1";
    public static String HAS_CANCLE = "2";

    /**
     * 阅读状态（0未读，1已读）
     */
    public static String HAS_READ_FLAG = "1";
    public static String NO_READ_FLAG = "0";

    /**
     * 优先级（L低，M中，H高）
     */
    public static String PRIORITY_L = "L";
    public static String PRIORITY_M = "M ";
    public static String PRIORITY_H = "H";

    /**
     * 查询字段分隔符
     */
    String QUERY_FIELDS_SEPARATOR = ",";
    /**
     * ID集 分隔符
     */
    String SYSIDS_SEPARATOR = ",";

    String ERR_PAGE_403 = "/403";
    String ERR_PAGE_404 = "/404";
    String ERR_PAGE_500 = "/500";

    /**
     * redis key 以 {@code $_$} 开头，则可以序列化时，不添加前缀
     */
    String REDIS_KEY_REMOVE_PREFIX_PATTERN = "$_$";


    String UPLOAD_FILE_PATH_DATE_SEPARATOR_PATTERN = "yyyy/MM/dd";
    String UPLOAD_FILE_RETURN_PREVIEW_FLAG_KEY = "preview";

    /**
     * 在该项目框架中{@link javax.annotation.Priority}注解所使用的初始默认优先级数值
     */
    int INITIAL_PRIORITY = 10000;

    /**
     * 默认的 appkey
     */
    String HTTP_REQ_DEF_APPKEY = "def";
    /**
     * 向请求绑定数据  NONCE
     */
    String HTTP_REQ_ATTR_NONCE = "HTTP_REQ_ATTR_NONCE";
    /**
     * 向请求绑定数据  SIGNATURE
     */
    String HTTP_REQ_ATTR_SIGNATURE = "HTTP_REQ_ATTR_SIGNATURE";
    /**
     * 向请求绑定数据  TIMESTAMP
     */
    String HTTP_REQ_ATTR_TIMESTAMP = "HTTP_REQ_ATTR_TIMESTAMP";
    /**
     * 向请求绑定数据  APPKEY
     */
    String HTTP_REQ_ATTR_APPKEY = "HTTP_REQ_ATTR_APPKEY";
    /**
     * 向请求绑定数据  用户请求重试
     */
    String HTTP_NONCE_ERROR_RETRY_PREFIX = "HTTP_NONCE_ERROR_RETRY:";


    String REQ_ATTR_CUS_SYS_LOG_REQ_RESULT_DATA = "CUS_SYS_LOG_REQ_RESULT_DATA";
    String REQ_ATTR_CUS_SYS_LOG_REQ_RESULT_IV = "CUS_SYS_LOG_REQ_RESULT_IV";
    String REQ_ATTR_CUS_SYS_LOG_REQ_RESULT_AES_KEY = "CUS_SYS_LOG_REQ_RESULT_AES_KEY";
    String REQ_ATTR_CUS_SYS_LOG_REQ_RESULT_CALL_BACK_TOKEN = "CUS_SYS_LOG_REQ_RESULT_CALL_BACK_TOKEN";

    String FILE_REQ_ATTR_IS_UPLOAD_API_KEY = "FILE_REQ_ATTR_IS_UPLOAD_API";
    String FILE_REQ_ATTR_IS_UPLOAD_API_VAL = "IS_UPLOAD_API_VAL_TRUE";
    String FILE_REQ_ATTR_IS_DOWNLOAD_API_KEY = "FILE_REQ_ATTR_IS_DOWNLOAD_API";
    String FILE_REQ_ATTR_IS_DOWNLOAD_API_VAL = "IS_DOWNLOAD_API_VAL_TRUE";


    String APP_KEY_LAND = "cus_app_land";
    String APP_KEY_ENFORCE = "cus_app_enforce";

    /**
     * 短信验证码次数限制 缓存key  req:sms:code:limit:${remoteIp}:${yyyyMMddHHmm}
     */
    String REQ_SMS_CODE_LIMIT_CACHE_KEY = "req:sms:code:limit:%s:%s";

    /**
     * 短信验证码 缓存key  req:sms:code:${mobile}
     */
    String REQ_SMS_CODE_CACHE_KEY = "req:sms:code:%s";

    /** redis 延迟任务缓存 key */
    String DELAY_SCHEDULE_REDIS_KEY = "CUSTOM_DELAY_SCHEDULE";

    /** 延迟任务 Demo */
    String DS_DEMO = "DEMO@";


    String FILE_UPLOAD_VALID_EXTENSION_PATTERN = "file_upload:%s:valid_extension";
    String FILE_UPLOAD_MAX_SIZE_PATTERN = "file_upload:%s:max_size";

    String FMT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    String FMT_YYYY_MM_DD = "yyyy-MM-dd";

    /** 有效车牌号的前缀， 完整缓存的 KEY 格式为: VALID_VENDOR_PLATE_NUMBER_PREFIX:{vendor}:{plateNumber} */
    String CACHE_KEY_VALID_VENDOR_PLATE_NUMBER_PREFIX = "VALID_VENDOR_PLATE_NUMBER_PREFIX:";
    String CACHE_KEY_VALID_VENDOR_PLATE_NUMBER_PATTERN = CACHE_KEY_VALID_VENDOR_PLATE_NUMBER_PREFIX + "%s:%s";

    /** 小程序的接口调用令牌的 key, 格式为 $_$REMOTE_XCX_ACCESS_TOKEN:{appid} */
    String CACHE_KEY_REMOTE_XCX_ACCESS_TOKEN_PREFIX = REDIS_KEY_REMOVE_PREFIX_PATTERN + "REMOTE_XCX_ACCESS_TOKEN:";
    String CACHE_KEY_REMOTE_XCX_ACCESS_TOKEN_PATTERN = CACHE_KEY_REMOTE_XCX_ACCESS_TOKEN_PREFIX + "%s";
}
